<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>machinectl
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>machinectl 中文手册</h1><h2 id="auth_name">译者：<strong><a href="../index.html">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="../index.html">金步国作品集</a> [ <a href="../index.html">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="machinectl"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>machinectl — 控制 systemd 虚拟机与容器注册管理器</p></div><div class="refsynopsisdiv"><h2>大纲</h2><div class="cmdsynopsis"><p><code class="command">machinectl</code>  [OPTIONS...] {COMMAND} [NAME...]</p></div></div><div class="refsect1"><a name="id-1.5"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p><span class="command"><strong>machinectl</strong></span>
    用于内省与控制
    <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
    的虚拟机与容器注册管理器
    <a href="systemd-machined.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a> 的状态。</p><p><span class="command"><strong>machinectl</strong></span>
    可以操作机器(machine)与镜像(image)。
    "机器"(machine)这个词有如下几种含义：</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>在宿主系统上运行的虚拟机(Virtual Machine)实例。
      也就是运行在例如KVM之类虚拟化技术之上的操作系统实例。
      虚拟机拥有自己独立运行的操作系统内核。</p></li><li class="listitem"><p>在宿主系统上运行的容器(Container)实例。
      也就是与宿主系统共享操作系统内核，
      仅在容器自身专属的名字空间内运行用户空间程序。</p></li><li class="listitem"><p>正处于运行状态的宿主系统自身。</p></li></ul></div><p>机器的名称(NAME)需要遵守与 UNIX/DNS主机名(hostname)
     相同的规则(详见后文)。</p><p>机器由磁盘或文件系统镜像实例化而来，
    经常(但并不必然)直接将实例中的主机名(hostname)用作机器的名称。
    "镜像"(image)这个词有如下几种含义：</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>包含操作系统的目录树。
      通常包含 <code class="filename">/usr</code>,
      <code class="filename">/etc</code> ... 这些顶层目录。</p></li><li class="listitem"><p>包含操作系统的 btrfs 子卷。类似于一个包含操作系统的普通目录树。</p></li><li class="listitem"><p>包含MBR或GPT分区表以及Linux文件系统的
      二进制"raw"磁盘镜像文件。</p></li><li class="listitem"><p>包含MBR或GPT分区表以及Linux文件系统的块设备。</p></li><li class="listitem"><p>宿主系统自身的文件系统目录树。</p></li></ul></div></div><div class="refsect1"><a name="id-1.6"></a><h2 id="选项(OPTIONS)">选项(OPTIONS)<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E9%80%89%E9%A1%B9(OPTIONS)">¶</a></h2><p>可以识别如下命令行选项：</p><div class="variablelist"><dl class="variablelist"><dt id="-p"><span class="term"><code class="option">-p</code>, </span><span class="term"><code class="option">--property=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-p">¶</a></dt><dd><p>在显示机器或镜像的属性时，
        仅显示在此选项中指定的属性。
        如果未使用此选项，那么将显示所有属性。
        选项值必须是一个例如
        "<code class="literal">Name</code>" 这样的属性名。
        可以多次使用此选项
        以显示多个属性。</p></dd><dt id="-a"><span class="term"><code class="option">-a</code>, </span><span class="term"><code class="option">--all</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-a">¶</a></dt><dd><p>在显示机器或镜像的属性时，
        强制显示所有属性，
        无论这些属性是否已被设置。</p><p>在列出虚拟机或容器镜像时，
        也显示以句点字符("<code class="literal">.</code>")
       开头的镜像。 </p><p>在删除虚拟机或容器镜像时，删除所有镜像(而不仅仅是隐藏的镜像)。</p></dd><dt id="--value"><span class="term"><code class="option">--value</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--value">¶</a></dt><dd><p>在使用 <span class="command"><strong>show</strong></span> 命令显示属性时，仅显示属性的值，
        而不显示属性的名称以及等号("<code class="literal">=</code>")。</p></dd><dt id="-l"><span class="term"><code class="option">-l</code>, </span><span class="term"><code class="option">--full</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-l">¶</a></dt><dd><p>在显示进程树的时候，不对超长行进行截断。</p></dd><dt id="--kill-who="><span class="term"><code class="option">--kill-who=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--kill-who=">¶</a></dt><dd><p>与 <span class="command"><strong>kill</strong></span> 命令一起使用，
        指定要杀死哪些进程。
        <code class="option">leader</code> 表示仅杀死领头的父进程。
        <code class="option">all</code> 表示杀死所有匹配的进程。
        如果未指定此选项，那么相当于使用默认值
        <code class="option">all</code> 。</p></dd><dt id="-s"><span class="term"><code class="option">-s</code>, </span><span class="term"><code class="option">--signal=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-s">¶</a></dt><dd><p>与 <span class="command"><strong>kill</strong></span> 命令一起使用，
        表示向指定的进程发送什么信号。
        必须设为一个众所周知的、例如
        <code class="constant">SIGTERM</code>, <code class="constant">SIGINT</code>,
        <code class="constant">SIGSTOP</code> 这样的信号。如果未指定此选项，那么相当于使用默认的
        <code class="constant">SIGTERM</code> 信号。</p></dd><dt id="--uid="><span class="term"><code class="option">--uid=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--uid=">¶</a></dt><dd><p>与 <span class="command"><strong>shell</strong></span> 命令一起使用，
         表示以哪个用户身份启动交互式 shell 会话。注意，如果在 <span class="command"><strong>shell</strong></span>
         命令的参数中已经给出了一个用户，那么此选项将被忽略。如果没有以任何方式指定用户身份，
         那么表示使用默认的 "<code class="literal">root</code>" 用户。注意，此选项并不适用于
          <span class="command"><strong>login</strong></span> 命令(见后文)。</p></dd><dt id="-E NAME=VALUE"><span class="term"><code class="option">-E <em class="replaceable"><code>NAME</code></em>=<em class="replaceable"><code>VALUE</code></em></code>, </span><span class="term"><code class="option">--setenv=<em class="replaceable"><code>NAME</code></em>=<em class="replaceable"><code>VALUE</code></em></code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-E%20NAME=VALUE">¶</a></dt><dd><p>与 <span class="command"><strong>shell</strong></span> 命令一起使用，向 shell 传递指定的环境变量。
         其中， <em class="replaceable"><code>NAME</code></em> 是变量名称，<em class="replaceable"><code>VALUE</code></em> 是变量的值。
         可以多次使用此选项以设置多个环境变量。
         注意，此选项并不适用于
          <span class="command"><strong>login</strong></span> 命令(见后文)。</p></dd><dt id="--mkdir"><span class="term"><code class="option">--mkdir</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--mkdir">¶</a></dt><dd><p>与 <span class="command"><strong>bind</strong></span> 命令一起使用，
        表示在实际执行绑定挂载动作之前，先创建目标挂载点文件或目录。
        注意，虽然此选项的名称看上去只能创建目录，但是如果要挂载的对象是常规文件、设备节点、套接字、管道(FIFO)，
        此选项仍然能够创建要挂载的目标文件节点。</p></dd><dt id="--read-only"><span class="term"><code class="option">--read-only</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--read-only">¶</a></dt><dd><p>与 <span class="command"><strong>bind</strong></span> 命令一起使用，表示创建只读绑定挂载点。</p><p>与 <span class="command"><strong>clone</strong></span>, <span class="command"><strong>import-raw</strong></span>, <span class="command"><strong>import-tar</strong></span> 命令一起使用，
        表示创建一个只读的容器或虚拟机镜像。</p></dd><dt id="-n"><span class="term"><code class="option">-n</code>, </span><span class="term"><code class="option">--lines=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-n">¶</a></dt><dd><p>与 <span class="command"><strong>status</strong></span> 命令一起使用，
        表示显示多少行日志(从最近的一行日志算起)。
        必须设为一个正整数。
        默认值是 10 。</p></dd><dt id="-o"><span class="term"><code class="option">-o</code>, </span><span class="term"><code class="option">--output=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-o">¶</a></dt><dd><p>与 <span class="command"><strong>status</strong></span> 命令一起使用，
        控制日志的显示格式。
        可用的格式参见
        <a href="journalctl.html#"><span class="citerefentry"><span class="refentrytitle">journalctl</span>(1)</span></a> 手册。
        默认值是 "<code class="literal">short</code>" 。</p></dd><dt id="--verify="><span class="term"><code class="option">--verify=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--verify=">¶</a></dt><dd><p>是否在下载容器或虚拟机镜像时
        校验其有效性。
        可设为 "<code class="literal">no</code>",
        "<code class="literal">checksum</code>", "<code class="literal">signature</code>" 之一。
        "<code class="literal">no</code>" 表示不作任何校验；
        "<code class="literal">checksum</code>"
        表示仅校验镜像文件的散列值；
        "<code class="literal">signature</code>"
        表示不但校验镜像文件的散列值，
        而且还要根据本地的可信公钥/证书校验校验镜像文件的签名。
        强烈建议尽可能将此选项设为
        "<code class="literal">signature</code>" 以获取最强的安全保护。
        默认值为
        "<code class="literal">signature</code>" 。</p></dd><dt id="--force"><span class="term"><code class="option">--force</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--force">¶</a></dt><dd><p>在下载容器或虚拟机镜像时，
        如果本地已经存在同名镜像，
        那么强制使用新下载的镜像
        覆盖本地的同名镜像。</p></dd><dt id="--format="><span class="term"><code class="option">--format=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--format=">¶</a></dt><dd><p>与 <code class="option">export-tar</code>
        或 <code class="option">export-raw</code> 命令一起使用，
        指定结果文件的压缩格式。可设为
        "<code class="literal">uncompressed</code>", "<code class="literal">xz</code>",
        "<code class="literal">gzip</code>", "<code class="literal">bzip2</code>" 之一。
        默认值根据指定的镜像文件名称
        自动猜测。</p></dd><dt id="--max-addresses="><span class="term"><code class="option">--max-addresses=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--max-addresses=">¶</a></dt><dd><p>与 <code class="option">list-machines</code> 命令一起使用，
        限制每一个机器输出的最大IP地址数量(默认值是"1")。
        设为 "<code class="literal">all</code>" 表示输出全部的IP地址。
        如果
        <code class="option">--max-addresses</code> 的值小于实际的IP地址数，
        那么将在最后一个IP地址后面显示 "<code class="literal">...</code>" 。
        如果要为某个机器输出多个IP地址，
        那么除第一个IP地址之外的其他每一个IP地址都会占有一个新行，
        并且如果还有后继的IP地址要输出，那么还会带有一个 "<code class="literal">,</code>" 后缀。</p></dd><dt id="-q"><span class="term"><code class="option">-q</code>, </span><span class="term"><code class="option">--quiet</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-q">¶</a></dt><dd><p>安静模式，也就是不显示额外的运行时信息。</p></dd><dt id="-H"><span class="term"><code class="option">-H</code>, </span><span class="term"><code class="option">--host=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-H">¶</a></dt><dd><p><a name="host-text"></a>操作指定的远程主机。可以仅指定一个主机名(hostname)，
      也可以使用 "<code class="literal">username@hostname</code>" 格式。
      hostname 后面还可以加上
      SSH监听端口(以冒号"<code class="literal">:</code>"分隔)与容器名(以正斜线"<code class="literal">/</code>"分隔)，
      也就是形如 "<code class="literal">hostname:port/container</code>" 的格式，
      以表示直接连接到指定主机的指定容器内。
      操作将通过SSH协议进行，以确保安全。
      可以通过
      <span class="command"><strong>machinectl -H
      <em class="replaceable"><code>HOST</code></em></strong></span> 命令列出远程主机上的所有容器名称。IPv6地址必须放在方括号([])内。</p></dd><dt id="-M"><span class="term"><code class="option">-M</code>, </span><span class="term"><code class="option">--machine=</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-M">¶</a></dt><dd><p>连接到指定的本地容器内的
        <a href="systemd-machined.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a>
        服务，
        并在指定的本地容器内执行操作。</p></dd><dt id="--no-pager"><span class="term"><code class="option">--no-pager</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--no-pager">¶</a></dt><dd><p>不将程序的输出内容管道(pipe)给分页程序。</p></dd><dt id="--no-legend"><span class="term"><code class="option">--no-legend</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--no-legend">¶</a></dt><dd><p>不输出列标题，
      也就是不在输出列表的头部和尾部显示字段的名称。</p></dd><dt id="--no-ask-password"><span class="term"><code class="option">--no-ask-password</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--no-ask-password">¶</a></dt><dd><p>在执行特权操作时不向用户索要密码。</p></dd><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#-h">¶</a></dt><dd><p><a name="help-text"></a>显示简短的帮助信息并退出。
    </p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#--version">¶</a></dt><dd><p><a name="version-text"></a>显示简短的版本信息并退出。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.7"></a><h2 id="命令(COMMAND)">命令(COMMAND)<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E5%91%BD%E4%BB%A4(COMMAND)">¶</a></h2><p>可以识别的命令如下：</p><div class="refsect2"><a name="id-1.7.3"></a><h3 id="机器(Machine)命令">机器(Machine)命令<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E6%9C%BA%E5%99%A8(Machine)%E5%91%BD%E4%BB%A4">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="list"><span class="term"><span class="command"><strong>list</strong></span></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#list">¶</a></dt><dd><p>列出当前正在运行的虚拟机与容器。
        如果要列出可以启动的机器镜像，那么应该使用
         <span class="command"><strong>list-images</strong></span> 命令(见下文)。
        注意，此命令默认不显示例如
        "<code class="literal">.host</code>" 这样名称以句点开头的机器(可以使用
        <code class="option">--all</code> 选项来强制显示)。</p></dd><dt id="status NAME…"><span class="term"><span class="command"><strong>status</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#status%20NAME%E2%80%A6">¶</a></dt><dd><p>显示
        当前正在运行的虚拟机与容器的状态信息，
        并且在末尾部还会附上几条该机器最新的日志消息。
        此命令仅用于输出人类易读的信息，
        不要将其用于程序分析(应该使用 <span class="command"><strong>show</strong></span> 命令)。
        注意，
        显示的日志消息来自于虚拟机与容器管理器，
        其中通常包含有机器的控制台输出，
        且并不必然包含机器自身的日志内容。</p></dd><dt id="show [NAME…]"><span class="term"><span class="command"><strong>show</strong></span> [<em class="replaceable"><code>NAME</code></em>…]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#show%20%5BNAME%E2%80%A6%5D">¶</a></dt><dd><p>如果未指定任何 NAME 参数，那么显示虚拟机与容器管理器自身的属性；
        如果指定了至少一个 NAME 参数，那么显示指定的虚拟机与容器的各项属性(必须是已注册的机器)。
        注意，默认不显示尚未设置的属性，但是可以通过使用
        <code class="option">--all</code> 选项强制显示所有属性。可以使用
        <code class="option">--property=</code> 选项限定仅显示指定的属性。
        此命令仅用于输出易于程序分析的信息，如果想要输出人类易读的信息，
        应该使用 <span class="command"><strong>status</strong></span> 命令。</p></dd><dt id="start NAME…"><span class="term"><span class="command"><strong>start</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#start%20NAME%E2%80%A6">¶</a></dt><dd><p>将指定的每个容器都作为一个系统服务启动(通过
        <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
        工具)。这将会按照指定的机器名称对 <code class="filename">systemd-nspawn@.service</code>
        进行实例化，然后再像
         <span class="command"><strong>systemctl start</strong></span> 一样启动所得到的服务单元实例。
        <span class="command"><strong>systemd-nspawn</strong></span>
        将会按照指定的名称在
        <code class="filename">/var/lib/machines/</code>
        等搜索目录(详见下文)中查找容器镜像并运行它。
        可以使用下文的 <span class="command"><strong>list-images</strong></span>
        命令列出可启动的容器镜像。</p><p>注意，因为
        <a href="systemd-machined.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a>
        不但可以与 <span class="command"><strong>systemd-nspawn</strong></span> 通信，
        还可以与多种不同的其他虚拟机与容器管理器通信，
        所以，同样的，
        <span class="command"><strong>machinectl</strong></span> 的大部分命令
        不但可以作用于 <span class="command"><strong>systemd-nspawn</strong></span> 管理器，
        还可以作用于多种不同的其他虚拟机与容器管理器。
        注意，使用此命令启动其他其他虚拟机与容器管理器的虚拟机与容器，
        需要配合该管理器的专用工具。</p><p>如果想要在命令行上交互式启动一个容器，
        并能够完全在容器的控制台上操作，那么必须直接使用
        <span class="command"><strong>systemd-nspawn</strong></span> 命令。
        可以使用 <span class="command"><strong>machinectl poweroff</strong></span> 命令关闭运行中的容器。</p></dd><dt id="login [NAME]"><span class="term"><span class="command"><strong>login</strong></span> [<em class="replaceable"><code>NAME</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#login%20%5BNAME%5D">¶</a></dt><dd><p>在宿主机或指定的容器中
        开启一个交互式的终端登录会话。
        如果指定了 NAME 参数，那么表示连接到指定名称的容器；
        如果未指定 NAME 参数或者其值为空字符串或者特殊值
        "<code class="literal">.host</code>" (见后文)，
        那么表示连接到本地宿主机。
        这将创建一个连接到宿主机或指定容器的终端(TTY)，
        并在其中启动 getty 程序。
        注意，
        此命令仅适用于将
        <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
        用作 init 进程的系统。</p><p>此命令将在指定的容器或宿主机上打开一个登录提示符，
        并提示输入用户名与密码进行登录。
        可以使用下文的 <span class="command"><strong>shell</strong></span> 命令、或者带有 <code class="option">--machine=</code> 选项的
        <a href="systemd-run.html#"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a>
        命令直接运行一个单独的命令行
        (可以在前台交互式运行
        也可以在后台非交互式运行)。</p></dd><dt id="shell [[USER@]NAME [PATH [ARGUMENTS…]]] "><span class="term"><span class="command"><strong>shell</strong></span> [[<em class="replaceable"><code>USER</code></em>@]<em class="replaceable"><code>NAME</code></em> [<em class="replaceable"><code>PATH</code></em> [<em class="replaceable"><code>ARGUMENTS</code></em>…]]] </span><a class="headerlink" title="Permalink to this term" href="machinectl.html#shell%20%5B%5BUSER@%5DNAME%20%5BPATH%20%5BARGUMENTS%E2%80%A6%5D%5D%5D%20">¶</a></dt><dd><p>在宿主机或指定的容器中
        以特定的用户身份运行一个指定的命令。
        第一个参数表示连接到哪个机器：
        如果指定了 NAME 参数，那么表示连接到指定名称的容器；
        如果未指定 NAME 参数或者其值为空字符串或者特殊值"<code class="literal">.host</code>"(见后文)，
        那么表示连接到本地宿主机。
        这与 <span class="command"><strong>login</strong></span> 命令类似，
        但不同之处在于此命令会立即运行
        <em class="replaceable"><code>PATH</code></em> 参数所指定的命令(若未指定则表示启动该用户的默认 shell ，
        若该用户没有默认 shell 则启动 <code class="filename">/bin/sh</code> 进程)。
        <em class="replaceable"><code>USER</code></em> 的默认值是 "<code class="literal">root</code>" 用户，但是可以通过
        <code class="option">--uid=</code> 选项或者明确设置
        <em class="replaceable"><code>USER</code></em> 的值来指定其他用户。
        可以使用 <code class="option">--setenv=</code>
        选项来为被执行的进程设置环境变量。</p><p>注意，<span class="command"><strong>machinectl shell</strong></span> 并不传递被调用进程的退出状态。
        不过 <span class="command"><strong>systemd-run</strong></span> 工具可以传递被调用进程的退出状态(见下文)。</p><p>如果不带任何参数的使用 <span class="command"><strong>shell</strong></span> 命令，
        那么将会在本地宿主机上启动一个交互式 shell 会话(默认为 "<code class="literal">root</code>" 用户)，
        这与启动一个
        <a href="https://linux.die.net/man/1/su"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a>
        会话很类似，但是不同之处在于，
        新启动的 shell 会话与原来的老 shell 会话是完全隔离的，
        新老会话不共享任何进程与会话属性，新会话完全处于一个干净的状态，
        新会话不带有老会话的任何痕迹。
        新会话将会拥有全新的 utmp, login, audit, security and keyring session, ...
        并且不会继承
        任何老会话中的环境变量与资源限制等各种属性。</p><p>设置了 <code class="option">--machine=</code> 选项的 <a href="systemd-run.html#"><span class="citerefentry"><span class="refentrytitle">systemd-run</span>(1)</span></a> 命令
        可以用于代替 <span class="command"><strong>machinectl shell</strong></span> 命令，
        前者具有下列优势：(1)允许非交互式操作；(2)可以更详细的对被调用单元进行底层配置；
        (3)可以传递被调用进程的运行时状态与退出状态。具体说来就是使用
        <span class="command"><strong>systemd-run</strong></span> 的 <code class="option">--wait</code> 选项来传递被调用进程的退出状态；
        使用 <span class="command"><strong>systemd-run</strong></span> 的 <code class="option">--pty</code> 选项来获得一个交互式 shell (与 <span class="command"><strong>machinectl shell</strong></span> 类似)。
        在实践中，<span class="command"><strong>systemd-run</strong></span> 一般用于脚本。
        需要注意的是，<span class="command"><strong>systemd-run</strong></span> 有可能比
         <span class="command"><strong>machinectl shell</strong></span> 要求更高的权限。</p></dd><dt id="enable NAME…"><span class="term"><span class="command"><strong>enable</strong></span> <em class="replaceable"><code>NAME</code></em>…, </span><span class="term"><span class="command"><strong>disable</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#enable%20NAME%E2%80%A6">¶</a></dt><dd><p>是否在宿主系统启动的同时
        自动使用
        <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
        将指定的容器作为系统服务来启动。也就是启用/禁用指定的容器所对应的
        <code class="filename">systemd-nspawn@.service</code> 实例化单元。
        这两个命令在效果上与
        <span class="command"><strong>systemctl enable</strong></span> / <span class="command"><strong>systemctl
        disable</strong></span> 对服务单元的效果相同。</p></dd><dt id="poweroff NAME…"><span class="term"><span class="command"><strong>poweroff</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#poweroff%20NAME%E2%80%A6">¶</a></dt><dd><p>关闭指定的容器。
        这将会向指定容器中的 init 进程发送 SIGRTMIN+4 信号，
        遵守 systemd 规范的 init 进程将会干净的妥善关闭整个容器。
        [提示] <span class="command"><strong>stop</strong></span> 是 <span class="command"><strong>poweroff</strong></span> 的别名。
        注意，对于不遵守
        <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>
        规范的 init 进程来说(例如 sysvinit)，此命令是无效的。
        下文的 <span class="command"><strong>terminate</strong></span>
        命令可以强制立即关闭一个虚拟机或容器，
        但是有可能会造成数据丢失。</p></dd><dt id="reboot NAME…"><span class="term"><span class="command"><strong>reboot</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#reboot%20NAME%E2%80%A6">¶</a></dt><dd><p>重启指定的容器。
        这将会向指定容器中的 init 进程发送 SIGINT 信号，
        大致上相当于向指定的容器发送 Ctrl+Alt+Del 组合键。
        该命令兼容于
        所有容器内的各种 init 进程。</p></dd><dt id="terminate NAME…"><span class="term"><span class="command"><strong>terminate</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#terminate%20NAME%E2%80%A6">¶</a></dt><dd><p>强制立即关闭指定的虚拟机或容器，这有可能会造成数据丢失。
        此命令强制立即关闭虚拟机或容器的所有进程，
        并立即回收指定机器的所有资源。
        应该谨慎使用此命令，
        建议尽可能使用 <span class="command"><strong>poweroff</strong></span> 命令
        干净的关闭容器。</p></dd><dt id="kill NAME…"><span class="term"><span class="command"><strong>kill</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#kill%20NAME%E2%80%A6">¶</a></dt><dd><p>向指定的虚拟机或容器内的一个或多个
         <code class="option">--kill-who=</code>
        进程发送
         <code class="option">--signal=</code> 信号。
        注意，这里的进程是指在宿主机上看到的进程，
        而不是在虚拟机或容器内看到的进程。</p></dd><dt id="bind NAME SOURCE [TARGET]"><span class="term"><span class="command"><strong>bind</strong></span> <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>SOURCE</code></em> [<em class="replaceable"><code>TARGET</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#bind%20NAME%20SOURCE%20%5BTARGET%5D">¶</a></dt><dd><p>将宿主机上的指定路径绑定挂载到指定容器内的指定路径上。<em class="replaceable"><code>NAME</code></em> 是容器名，
        <em class="replaceable"><code>SOURCE</code></em> 是宿主机上的源文件或目录的路径，<em class="replaceable"><code>TARGET</code></em> 是容器内的目标文件或目录的路径。
        如果省略后一个参数，那么表示容器内的目标路径与宿主机上的源路径相同。
        如果使用了 <code class="option">--read-only</code> 选项，那么表示以只读的方式绑定挂载。
        如果使用了 <code class="option">--mkdir</code> 选项，那么表示自动创建不存在的目标文件或目录。
        注意，<code class="option">--mkdir</code> 选项仅可用于
        <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
        创建的容器，并且仅在未使用 <code class="option">--private-users</code> 选项的情况下才有效。此命令支持绑定挂载
        目录、普通文件、设备节点、<code class="constant">AF_UNIX</code> 套接字、
        管道(FIFO)。</p></dd><dt id="copy-to NAME SOURCE [TARGET]"><span class="term"><span class="command"><strong>copy-to</strong></span> <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>SOURCE</code></em> [<em class="replaceable"><code>TARGET</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#copy-to%20NAME%20SOURCE%20%5BTARGET%5D">¶</a></dt><dd><p>将宿主机上的指定路径(文件或目录)复制到指定容器内的指定路径上。
        <em class="replaceable"><code>NAME</code></em> 是容器名，
        <em class="replaceable"><code>SOURCE</code></em> 是宿主机上的某个路径(文件或目录)，
        <em class="replaceable"><code>TARGET</code></em> 是指定容器内的某个路径
        (省略表示与 <em class="replaceable"><code>SOURCE</code></em> 相同)。</p><p>如果宿主机与容器共享同一个用户名字空间，
        那么文件与目录的UID/GID在复制后保持不变，
        否则复制后的文件与目录的UID/GID将被统一设为"0"。</p></dd><dt id="copy-from NAME SOURCE [TARGET]"><span class="term"><span class="command"><strong>copy-from</strong></span> <em class="replaceable"><code>NAME</code></em> <em class="replaceable"><code>SOURCE</code></em> [<em class="replaceable"><code>TARGET</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#copy-from%20NAME%20SOURCE%20%5BTARGET%5D">¶</a></dt><dd><p>将指定容器内的指定路径(文件或目录)复制到宿主机上的指定路径上。
        <em class="replaceable"><code>NAME</code></em> 是容器名，
        <em class="replaceable"><code>SOURCE</code></em> 是指定容器内的某个路径(文件或目录)，
        <em class="replaceable"><code>TARGET</code></em> 是宿主机上的某个路径
        (省略表示与 <em class="replaceable"><code>SOURCE</code></em> 相同)。</p><p>如果宿主机与容器共享同一个用户名字空间，
        那么文件与目录的UID/GID在复制后保持不变，
        否则复制后的文件与目录的UID/GID将被统一设为"0"。</p></dd></dl></div></div><div class="refsect2"><a name="id-1.7.4"></a><h3 id="镜像(Image)命令">镜像(Image)命令<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E9%95%9C%E5%83%8F(Image)%E5%91%BD%E4%BB%A4">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="list-images"><span class="term"><span class="command"><strong>list-images</strong></span></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#list-images">¶</a></dt><dd><p>列出本地已安装的
        虚拟机与容器镜像。
        这将列出所有搜索目录(例如
        <code class="filename">/var/lib/machines/</code>
        等，详见后文)中的磁盘镜像、容器根目录或子卷。
        可以使用上文的 <span class="command"><strong>start</strong></span> 命令启动此命令列出的容器。
        注意，除非使用了 <code class="option">--all</code> 选项，
        否则此命令不会显示名称以句点("<code class="literal">.</code>")开头的容器。
        注意，名为
        "<code class="literal">.host</code>" 的特殊镜像总是隐含存在的，
        其含义是宿主机自身的镜像。</p></dd><dt id="image-status [NAME…]"><span class="term"><span class="command"><strong>image-status</strong></span> [<em class="replaceable"><code>NAME</code></em>…]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#image-status%20%5BNAME%E2%80%A6%5D">¶</a></dt><dd><p>显示指定镜像(可以是虚拟机镜像也可以是容器镜像)或者镜像池自身的简洁状态信息。
        如果未指定任何 <em class="replaceable"><code>NAME</code></em> 参数，那么将显示镜像池自身的搜索目录、已用空间、剩余空间。
        此命令仅用于输出人类易读的信息，
        不要将其用于程序分析(应该使用下面的 <span class="command"><strong>show-image</strong></span>
        命令)。</p></dd><dt id="show-image [NAME…]"><span class="term"><span class="command"><strong>show-image</strong></span> [<em class="replaceable"><code>NAME</code></em>…]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#show-image%20%5BNAME%E2%80%A6%5D">¶</a></dt><dd><p>显示指定镜像(可以是虚拟机镜像也可以是容器镜像)或者镜像池自身的属性。
        如果未指定任何 <em class="replaceable"><code>NAME</code></em> 参数，
        那么将显示镜像池自身的搜索目录、已用空间、剩余空间。
        如果明确指定了至少一个 <em class="replaceable"><code>NAME</code></em> 参数，
        那么将显示指定虚拟机或容器的镜像属性。
        注意，此命令默认不显示尚未设置的属性，但是可以通过使用
        <code class="option">--all</code> 选项强制显示所有属性。可以使用
        <code class="option">--property=</code> 选项限定仅显示指定的属性。
        此命令仅用于输出易于程序分析的信息，如果想要输出人类易读的信息，
        应该使用 <span class="command"><strong>image-status</strong></span>
        命令。</p></dd><dt id="clone FROMNAME TONAME"><span class="term"><span class="command"><strong>clone</strong></span> <em class="replaceable"><code>FROMNAME</code></em> <em class="replaceable"><code>TONAME</code></em></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#clone%20FROMNAME%20TONAME">¶</a></dt><dd><p>克隆一个虚拟机或容器镜像。
        <em class="replaceable"><code>FROMNAME</code></em> 表示克隆的源镜像名称，<em class="replaceable"><code>TONAME</code></em> 表示新创建的克隆镜像名称。
        注意，如果底层文件系统支持，那么基于单纯目录树的容器镜像将会优先克隆为 btrfs 子卷。
        也就是说，如果底层文件系统支持写时复制(copy-on-write)技术，
        那么在克隆时将会自动利用该技术。</p><p>注意，因为此命令并不会在克隆过程中修改例如
        主机名(hostname), "machine ID" 之类的系统实例标识符，
        所以克隆得到的副本镜像将会和源镜像拥有完全相同的系统标识，
        在某些情况下，
        可能需要手动的修改这些标识符。</p><p>如果和 <code class="option">--read-only</code> 选项一起使用，
        那么表示创建一个只读的克隆镜像。</p></dd><dt id="rename OLDNAME NEWNAME"><span class="term"><span class="command"><strong>rename</strong></span> <em class="replaceable"><code>OLDNAME</code></em> <em class="replaceable"><code>NEWNAME</code></em></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#rename%20OLDNAME%20NEWNAME">¶</a></dt><dd><p>将名为 <em class="replaceable"><code>OLDNAME</code></em>
        的虚拟机或容器镜像
        重命名为 <em class="replaceable"><code>NEWNAME</code></em> 。</p></dd><dt id="read-only NAME [BOOL]"><span class="term"><span class="command"><strong>read-only</strong></span> <em class="replaceable"><code>NAME</code></em> [<em class="replaceable"><code>BOOL</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#read-only%20NAME%20%5BBOOL%5D">¶</a></dt><dd><p>设置/取消指定虚拟机或容器镜像的只读属性。
        <em class="replaceable"><code>NAME</code></em> 表示镜像的名称，
        如果省略 <em class="replaceable"><code>BOOL</code></em> 参数，
        那么相当于设为 yes (设置只读标记)。</p></dd><dt id="remove NAME…"><span class="term"><span class="command"><strong>remove</strong></span> <em class="replaceable"><code>NAME</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#remove%20NAME%E2%80%A6">¶</a></dt><dd><p>
        从镜像池中删除指定的虚拟机或容器镜像。
        注意，不可以删除表示宿主机的、名为 "<code class="literal">.host</code>"
        的特殊镜像。</p></dd><dt id="set-limit [NAME] BYTES"><span class="term"><span class="command"><strong>set-limit</strong></span> [<em class="replaceable"><code>NAME</code></em>] <em class="replaceable"><code>BYTES</code></em></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#set-limit%20%5BNAME%5D%20BYTES">¶</a></dt><dd><p>为全部或指定的镜像(可以是虚拟机镜像也可以是容器镜像)
        设置可占用的最大磁盘空间(以字节为单位)。
        如果省略了 <em class="replaceable"><code>NAME</code></em> 参数，
        那么表示设置全部本地虚拟机与容器镜像总计能够占用的最大磁盘空间(以字节为单位)。
        如果指定了 <em class="replaceable"><code>NAME</code></em> 参数，
        那么表示仅设置指定的虚拟机或容器镜像可占用的最大磁盘空间(以字节为单位)。
        <em class="replaceable"><code>BYTES</code></em>
        参数用于设置最大磁盘空间的尺寸(以字节为单位，可以附加 K, M, G, T 后缀)，
        特殊值
        "<code class="literal">-</code>" 表示取消大小限制。</p><p>注意，针对每个容器的磁盘空间限制仅支持 btrfs 文件系统。</p></dd><dt id="clean"><span class="term"><span class="command"><strong>clean</strong></span></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#clean">¶</a></dt><dd><p>删除所有隐藏的虚拟机与容器镜像。也就是删除
         <code class="filename">/var/lib/machines</code> 目录下所有名称以句点开头的镜像。
         可以使用 <span class="command"><strong>machinectl list-images --all</strong></span> 命令列出所有镜像(包括隐藏的镜像)。</p><p>如果使用了 <code class="option">--all</code> 选项，那么将会删除所有镜像(而不仅仅只是隐藏的镜像)，
        这相当于是彻底清空 <code class="filename">/var/lib/machines</code> 目录。</p><p>注意，例如 <span class="command"><strong>machinectl pull-tar</strong></span> 或 <span class="command"><strong>machinectl
        pull-raw</strong></span> 这样的命令，通常都会在克隆已下载镜像的可写入副本(用于常规目的)之前，
        首先根据下载的镜像创建一个隐藏的、只读的、原封不动的镜像，以避免在多次使用下载镜像时再次重复下载。
         <span class="command"><strong>machinectl clean</strong></span> 命令可以用于删除
        出于此目的而创建的过时隐藏镜像。</p></dd></dl></div></div><div class="refsect2"><a name="id-1.7.5"></a><h3 id="镜像传输命令">镜像传输命令<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E9%95%9C%E5%83%8F%E4%BC%A0%E8%BE%93%E5%91%BD%E4%BB%A4">¶</a></h3><div class="variablelist"><dl class="variablelist"><dt id="pull-tar URL [NAME]"><span class="term"><span class="command"><strong>pull-tar</strong></span> <em class="replaceable"><code>URL</code></em> [<em class="replaceable"><code>NAME</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#pull-tar%20URL%20%5BNAME%5D">¶</a></dt><dd><p>从指定的 <em class="replaceable"><code>URL</code></em>
        下载一个 <code class="filename">.tar</code> 格式的容器镜像，
        并按照 <em class="replaceable"><code>NAME</code></em> 名称将其存储在本地镜像池中。
        <em class="replaceable"><code>URL</code></em> 的类型必须是 "<code class="literal">http://</code>" 或
        "<code class="literal">https://</code>" ，并且必须是一个
        <code class="filename">.tar</code>, <code class="filename">.tar.gz</code>,
        <code class="filename">.tar.xz</code>, <code class="filename">.tar.bz2</code>
        归档文件。如果省略了 <em class="replaceable"><code>NAME</code></em> 参数，
        那么镜像的名称将自动由归档文件的名称中提取
        (也就是去掉上述后缀)。</p><p>除非明确使用了 <code class="option">--verify=no</code> 选项，
        否则将会自动校验下载的镜像文件。
        校验操作可以是基于内联的签名文件(与镜像同名并以
         <code class="filename">.sha256</code> 作为后缀)，
        也可以是基于分离的 <code class="filename">SHA256SUMS</code> 与
        <code class="filename">SHA256SUMS.gpg</code> 签名文件。
        签名文件必须与镜像文件位于同一个 URL 的同一个目录中。
        如果明确指定了
         <code class="option">--verify=checksum</code> ，
        那么表示仅基于 <code class="filename">.sha256</code>
        或 <code class="filename">SHA256SUMS</code> 文件校验镜像文件的 SHA256 散列值。
        如果明确指定了 <code class="option">--verify=signature</code> ，
        那么表示基于
        <code class="filename">.sha256</code> 或
        <code class="filename">SHA256SUMS.gpg</code> 文件校验镜像文件的 SHA256 散列值。
        注意，基于GPG的校验要求所使用的GPG公钥必须已经预先存在于
        <code class="filename">/usr/lib/systemd/import-pubring.gpg</code> 或
        <code class="filename">/etc/systemd/import-pubring.gpg</code> 文件中。</p><p>容器镜像
        将会被下载并保存到
        <code class="filename">/var/lib/machines/</code> 目录下的一个只读子卷上，
        镜像文件的本地保存名称由 "<code class="filename">.tar-</code>" + "镜像的URL" + "HTTP etag" 组成，
        随后，将从该子卷上创建一个名为 <em class="replaceable"><code>NAME</code></em> 的可写快照。
        这样就可以高效的根据同一个URL下载的镜像创建多个不同的容器实例，
        而不必重复下载同一个镜像。
        如果你想只创建只读镜像，而避免创建可写快照，
        那么可以将 <em class="replaceable"><code>NAME</code></em>
        参数设为 "<code class="literal">-</code>" 。</p><p>注意，因为只读子卷的名称带有
        <code class="filename">.tar-</code> 前缀，所以
        <span class="command"><strong>list-images</strong></span> 命令必须配合 <code class="option">--all</code>
        选项才能显示出来。</p><p>注意，在此命令的执行过程中按 Ctrl+C 键并不会中断下载。
        要想中断下载，
        应该使用下文的 <span class="command"><strong>cancel-transfer</strong></span>
        命令。</p></dd><dt id="pull-raw URL [NAME]"><span class="term"><span class="command"><strong>pull-raw</strong></span> <em class="replaceable"><code>URL</code></em> [<em class="replaceable"><code>NAME</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#pull-raw%20URL%20%5BNAME%5D">¶</a></dt><dd><p>从指定的 <em class="replaceable"><code>URL</code></em>
        下载一个 <code class="filename">.raw</code> 格式的容器或虚拟机磁盘镜像，
        并按照 <em class="replaceable"><code>NAME</code></em> 名称将其存储在本地镜像池中。
        <em class="replaceable"><code>URL</code></em> 的类型必须是 "<code class="literal">http://</code>" 或
        "<code class="literal">https://</code>" ，并且必须是一个
         <code class="filename">.qcow2</code> 或 <code class="filename">.raw</code> 格式的磁盘镜像。
        磁盘镜像可以是经过压缩的(也就是带有 <code class="filename">.gz</code>,
        <code class="filename">.xz</code>, <code class="filename">.bz2</code> 后缀)。
        如果省略了 <em class="replaceable"><code>NAME</code></em> 参数，
        那么镜像的名称将自动由归档文件的名称中提取
        (也就是去掉上述后缀)。</p><p>镜像文件的校验规则与上文的 <span class="command"><strong>pull-tar</strong></span>
        命令完全相同。</p><p>如果下载的镜像是
        <code class="filename">.qcow2</code> 格式，
        那么将会被自动转化为 <code class="filename">.raw</code> 格式进行存储。</p><p>下载的镜像将会以只读
         <code class="filename">.raw</code> 文件的方式存放在 <code class="filename">/var/lib/machines/</code> 目录中，
        镜像文件的本地保存名称由 "<code class="filename">.raw-</code>" + "镜像的URL" + "HTTP etag" 组成，
        随后，将会自动创建一个名为 <em class="replaceable"><code>NAME</code></em> 的本地可写入副本。
        如果你只想保存只读镜像，而不想创建可写入副本，
        那么可以将 <em class="replaceable"><code>NAME</code></em> 参数设为 "<code class="literal">-</code>" 。</p><p>注意，
        因为只读镜像的名称带有
        <code class="filename">.raw-</code> 前缀，所以
        <span class="command"><strong>list-images</strong></span> 命令必须配合 <code class="option">--all</code>
        选项才能显示出来。</p><p>注意，在此命令的执行过程中按 Ctrl+C 键并不会中断下载。
        要想中断下载，
        应该使用下文的 <span class="command"><strong>cancel-transfer</strong></span>
        命令。</p></dd><dt id="import-tar FILE [NAME]"><span class="term"><span class="command"><strong>import-tar</strong></span> <em class="replaceable"><code>FILE</code></em> [<em class="replaceable"><code>NAME</code></em>], </span><span class="term"><span class="command"><strong>import-raw</strong></span> <em class="replaceable"><code>FILE</code></em> [<em class="replaceable"><code>NAME</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#import-tar%20FILE%20%5BNAME%5D">¶</a></dt><dd><p>从 <em class="replaceable"><code>FILE</code></em> 文件导入一个 TAR/RAW 格式的虚拟机或容器镜像，
        并按照 <em class="replaceable"><code>NAME</code></em> 名称将其存储在本地镜像池(<code class="filename">/var/lib/machines/</code>)中。
        对于 <span class="command"><strong>import-tar</strong></span> 命令来说，
        <em class="replaceable"><code>FILE</code></em> 必须是一个 tar 归档文件(可以经过 xz, gzip, bzip2 压缩)，
        此文件将被释放到 <code class="filename">/var/lib/machines</code>
        目录下一个名为 <em class="replaceable"><code>NAME</code></em> 的子卷上。
        对于 <span class="command"><strong>import-raw</strong></span> 命令来说，
        <em class="replaceable"><code>FILE</code></em> 必须是一个 qcow2 或者 raw 磁盘镜像(可以经过 xz, gzip, bzip2 压缩)，
        此镜像将被释放为 <code class="filename">/var/lib/machines</code>
        目录下一个名为 <em class="replaceable"><code>NAME</code></em>.raw 的文件。
        如果省略了 <em class="replaceable"><code>NAME</code></em> 参数，那么其值将自动从 <em class="replaceable"><code>FILE</code></em> 参数中获取。
        如果将 <em class="replaceable"><code>FILE</code></em> 设置为 "<code class="literal">-</code>" ，
        那么镜像的内容将从标准输入读取，此时必须明确设置
        <em class="replaceable"><code>NAME</code></em> 参数。</p><p>可选地，可以使用 <code class="option">--read-only</code> 选项来创建一个只读的虚拟机或容器镜像。
        注意，在导入镜像时，并不会对镜像进行密码验证。</p><p>与镜像的下载类似，
        既可以使用 <span class="command"><strong>list-transfers</strong></span> 命令列出正在导入的镜像，
        也可以使用 <span class="command"><strong>cancel-transfer</strong></span> 命令取消正在进行中的镜像导入操作。</p></dd><dt id="import-fs DIRECTORY [NAME]"><span class="term"><span class="command"><strong>import-fs</strong></span> <em class="replaceable"><code>DIRECTORY</code></em> [<em class="replaceable"><code>NAME</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#import-fs%20DIRECTORY%20%5BNAME%5D">¶</a></dt><dd><p>将本地目录 <em class="replaceable"><code>DIRECTORY</code></em> 作为容器映像，导入本地镜像池(<code class="filename">/var/lib/machines/</code>)中。
        所执行的操作与 <span class="command"><strong>import-tar</strong></span> 和 <span class="command"><strong>import-raw</strong></span> 类似，
        不同之处仅在于 <em class="replaceable"><code>DIRECTORY</code></em> 是一个镜像目录而非镜像文件。
        如果系统支持，该命令会为新镜像创建 btrfs 快照或子卷。</p></dd><dt id="export-tar NAME [FILE]"><span class="term"><span class="command"><strong>export-tar</strong></span> <em class="replaceable"><code>NAME</code></em> [<em class="replaceable"><code>FILE</code></em>], </span><span class="term"><span class="command"><strong>export-raw</strong></span> <em class="replaceable"><code>NAME</code></em> [<em class="replaceable"><code>FILE</code></em>]</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#export-tar%20NAME%20%5BFILE%5D">¶</a></dt><dd><p>导出
        名为 <em class="replaceable"><code>NAME</code></em> 的虚拟机或容器的 TAR/RAW 镜像，
        并将其保存为 <em class="replaceable"><code>FILE</code></em> 文件。
        如果 <em class="replaceable"><code>FILE</code></em> 参数以
         "<code class="literal">.gz</code>" 结尾，那么将在保存时使用 gzip 压缩。
        类似的，以 "<code class="literal">.xz</code>" 结尾表示使用 xz 压缩、
        以 "<code class="literal">.bz2</code>" 结尾表示使用 bzip2 压缩。
        不以上述三种压缩格式结尾，则表示不作任何压缩。
        省略 <em class="replaceable"><code>FILE</code></em> 参数表示将镜像的内容输出到标准输出。
        可以使用
        <code class="option">--format=</code> 选项明确设置压缩格式，
        这在省略 <em class="replaceable"><code>FILE</code></em> 参数时特别有用。</p><p>与镜像的下载和导入类似，
        既可以使用 <span class="command"><strong>list-transfers</strong></span> 命令列出正在导出的镜像，
        也可以使用
        <span class="command"><strong>cancel-transfer</strong></span> 命令取消正在进行中的镜像导出操作。</p><p>注意，目前只有目录与子卷的镜像可以导出为 TAR 镜像，
        并且目前只有 raw 格式的磁盘镜像可以导出为 RAW
        镜像。</p></dd><dt id="list-transfers"><span class="term"><span class="command"><strong>list-transfers</strong></span></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#list-transfers">¶</a></dt><dd><p>列出当前
        正在传输(下载、导入、导出)的
        虚拟机与容器镜像。</p></dd><dt id="cancel-transfer ID…"><span class="term"><span class="command"><strong>cancel-transfer</strong></span> <em class="replaceable"><code>ID</code></em>…</span><a class="headerlink" title="Permalink to this term" href="machinectl.html#cancel-transfer%20ID%E2%80%A6">¶</a></dt><dd><p>取消指定 <em class="replaceable"><code>ID</code></em> 编号的
        镜像传输(下载、导入、导出)操作。
        可以使用上文的
        <span class="command"><strong>list-transfers</strong></span> 命令列出当前正在传输的镜像所对应的 ID 号。</p></dd></dl></div></div></div><div class="refsect1"><a name="id-1.8"></a><h2 id="机器与镜像的名称(NAME)">机器与镜像的名称(NAME)<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E6%9C%BA%E5%99%A8%E4%B8%8E%E9%95%9C%E5%83%8F%E7%9A%84%E5%90%8D%E7%A7%B0(NAME)">¶</a></h2><p>机器与镜像的名称必须严格遵守特定的规范。
    机器的名称首先必须是一个合格的主机名(hostname)，
    并且所能使用的字符范围比 DNS 与 UNIX/Linux 的语义更狭小。
    具体说来就是，
    机器的名称必须满足以下规则：
    (1)由句点连接的至少一个非空标签字符串组成；
    (2)句点不得出现在开头或末尾；
    (3)不得连续使用句点；
    (4)标签字符串中只能含有英文字母、阿拉伯数字、连字符(-)、下划线(_)；
    (5)总长度不得超过64个字符。</p><p>宿主系统自身用一个名为 "<code class="literal">.host</code>"
    的特殊机器表示。
    这主要是为了便于在宿主系统上执行某些操作或对宿主系统自身进行检查。
    注意，<span class="command"><strong>machinectl list</strong></span> 命令必须配合
     <code class="option">--all</code> 选项才能显示该机器。</p><p>镜像的名称就不需要遵守那么多苛刻的要求了，
    只要是可以作为文件名使用的 UTF-8 字符串即可：
    (1)不可以包含正斜杠；(2)不可以是单句点(.)或双句点(..)；(3)不可以包含控制字符；
    但是考虑到许多命令会自动根据给定机器名称去搜索对应的镜像，
    所以还是强烈建议镜像的名称同样要
    遵守与机器的名称一样的苛刻要求。</p><p>宿主系统自身的镜像用一个名为 "<code class="literal">.host</code>"
    的特殊镜像表示，
    这正好与上文提及的名为 "<code class="literal">.host</code>" 的特殊机器相对应。
    注意，<span class="command"><strong>machinectl
    list-images</strong></span> 命令必须配合
    <code class="option">--all</code> 选项才能显示该镜像。</p></div><div class="refsect1"><a name="id-1.9"></a><h2 id="文件与目录">文件与目录<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E6%96%87%E4%BB%B6%E4%B8%8E%E7%9B%AE%E5%BD%95">¶</a></h2><p>机器镜像优先存储在
    <code class="filename">/var/lib/machines/</code> 目录中，
    但是也会在 <code class="filename">/usr/local/lib/machines/</code> 与
    <code class="filename">/usr/lib/machines/</code> 目录中搜索镜像，
    出于兼容性原因，还会在 <code class="filename">/var/lib/container/</code> 中搜索镜像。
    注意，存储在
    <code class="filename">/usr</code> 下的镜像总是被视为只读镜像(总是以只读方式使用)。
    可将其他位置的镜像软连接至
    <code class="filename">/var/lib/machines/</code> 目录中，
    以便于利用 <span class="command"><strong>machinectl</strong></span> 工具进行管理。</p><p>注意，对镜像的某些操作仅在 btrfs 文件系统上才能支持(或者才能更有效、或者才能保证原子性)。</p><p>如下三种格式的磁盘镜像能够被
    <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
    与 <span class="command"><strong>machinectl</strong></span> 识别：</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>一个被视为容器根目录的普通目录树，
      其中包含了容器名字空间内的所有文件与目录。</p></li><li class="listitem"><p>btrfs 文件系统子卷。
      它与前面所说的普通目录非常类似，
      不过额外带有
      一些能够提高例如克隆或磁盘限额性能的特性。</p></li><li class="listitem"><p>"Raw"格式的磁盘镜像，也就是一个包含
       GPT 或 MBR 分区表的原始二进制磁盘镜像。
      此种类型的镜像其实就是一个以
      "<code class="literal">.raw</code>" 为后缀的普通文件。</p></li></ul></div><p>参见
    <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
    手册以了解更多有关镜像格式的说明，特别是对于
    <code class="option">--directory=</code> 与 <code class="option">--image=</code>
    选项的说明。</p></div><div class="refsect1"><a name="id-1.10"></a><h2 id="例子">例子<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E4%BE%8B%E5%AD%90">¶</a></h2><div class="example"><a name="id-1.10.2"></a><p class="title"><b>例 1. 下载一个 Ubuntu 镜像并在其中启动一个 shell </b></p><div class="example-contents"><pre class="programlisting"># machinectl pull-tar https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-root.tar.xz
# systemd-nspawn -M xenial-server-cloudimg-amd64-root</pre><p>这将下载一个
      <code class="filename">.tar</code> 镜像并对其进行校验，然后使用
      <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>
      在该容器内启动一个 shell 。</p></div></div><br class="example-break"><div class="example"><a name="id-1.10.3"></a><p class="title"><b>例 2. 下载一个 Fedora 镜像、为 root 用户设置密码、
      最后将此容器作为一个系统服务运行</b></p><div class="example-contents"><pre class="programlisting"># machinectl pull-raw --verify=no https://dl.fedoraproject.org/pub/fedora/linux/releases/27/CloudImages/x86_64/images/Fedora-Cloud-Base-27-1.6.x86_64.raw.xz
# systemd-nspawn -M Fedora-Cloud-Base-27-1.6.x86_64
# passwd
# exit
# machinectl start Fedora-Cloud-Base-27-1.6.x86_64
# machinectl login Fedora-Cloud-Base-27-1.6.x86_64</pre><p>这将下载一个 <code class="filename">.raw</code>
      镜像(但是并不对其进行校验)，
      首先在其中启动一个 shell 并在设置好 root 用户的密码之后退出，
      然后再将此容器作为一个系统服务运行，
      最后再在容器中启动登录提示符以等待用户登录。</p></div></div><br class="example-break"><div class="example"><a name="id-1.10.4"></a><p class="title"><b>例 3. 将一个容器镜像导出为一个 tar 归档文件</b></p><div class="example-contents"><pre class="programlisting"># machinectl export-tar fedora myfedora.tar.xz</pre><p>将名为 "<code class="literal">fedora</code>" 的容器导出为一个经过
      xz 压缩的 <code class="filename">myfedora.tar.xz</code> 归档文件，
      并将其保存在当前目录中。</p></div></div><br class="example-break"><div class="example"><a name="id-1.10.5"></a><p class="title"><b>例 4. 创建一个新的 shell 会话</b></p><div class="example-contents"><pre class="programlisting"># machinectl shell --uid=lennart</pre><p>在本地宿主机上为
       "<code class="literal">lennart</code>" 用户创建一个新的 shell 会话。
      此命令与 <a href="https://linux.die.net/man/1/su"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a>
      命令有一点类似。</p></div></div><br class="example-break"></div><div class="refsect1"><a name="id-1.11"></a><h2 id="退出状态">退出状态<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81">¶</a></h2><p>返回值为 0 表示成功，
    非零返回值表示失败代码。</p></div><div class="refsect1"><a name="id-1.12"></a><h2 id="环境变量">环境变量<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F">¶</a></h2><div class="variablelist"><dl class="variablelist"><dt id="$SYSTEMD_PAGER"><span class="term"><code class="varname">$SYSTEMD_PAGER</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#%24SYSTEMD_PAGER">¶</a></dt><dd><p>指定分页程序。仅在未指定 <code class="option">--no-pager</code> 选项时有意义。
      此变量会覆盖 <code class="varname">$PAGER</code> 的值。如果 <code class="varname">$SYSTEMD_PAGER</code> 与 <code class="varname">$PAGER</code> 都未设置，
      那么将会依次尝试如下常见的分页程序：
      <a href="http://man7.org/linux/man-pages/man1/less.1.html"><span class="citerefentry"><span class="refentrytitle">less</span>(1)</span></a>,
      <a href="http://man7.org/linux/man-pages/man1/more.1.html"><span class="citerefentry"><span class="refentrytitle">more</span>(1)</span></a>,
      如果最终仍未找到分页程序，那么将不使用分页。
      将此变量设为空字符串或 "<code class="literal">cat</code>" 等价于使用 <code class="option">--no-pager</code> 选项。</p></dd><dt id="$SYSTEMD_LESS"><span class="term"><code class="varname">$SYSTEMD_LESS</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#%24SYSTEMD_LESS">¶</a></dt><dd><p>用于覆盖默认传递给 <span class="command"><strong>less</strong></span>
      程序的命令行选项("<code class="literal">FRSXMK</code>")。</p><p>如果 <code class="varname">$SYSTEMD_LESS</code> 的值不含 "<code class="literal">K</code>" ，
      并且使用 <span class="command"><strong>less</strong></span> 作为分页程序，那么
      <span class="keycap"><strong>Ctrl</strong></span>+<span class="keycap"><strong>C</strong></span> 信号将会被忽略。
      这将允许 <span class="command"><strong>less</strong></span> 自己处理
      <span class="keycap"><strong>Ctrl</strong></span>+<span class="keycap"><strong>C</strong></span> 信号。</p></dd><dt id="$SYSTEMD_LESSCHARSET"><span class="term"><code class="varname">$SYSTEMD_LESSCHARSET</code></span><a class="headerlink" title="Permalink to this term" href="machinectl.html#%24SYSTEMD_LESSCHARSET">¶</a></dt><dd><p>用于覆盖默认传递给 <span class="command"><strong>less</strong></span> 程序的字符集。
      (如果终端兼容 UTF-8 ，那么默认值是 "<code class="literal">utf-8</code>" )</p></dd></dl></div></div><div class="refsect1"><a name="id-1.13"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="machinectl.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
      <a href="systemd-machined.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-machined.service</span>(8)</span></a>,
      <a href="systemd-nspawn.html#"><span class="citerefentry"><span class="refentrytitle">systemd-nspawn</span>(1)</span></a>,
      <a href="systemd.special.html#"><span class="citerefentry"><span class="refentrytitle">systemd.special</span>(7)</span></a>,
      <a href="https://linux.die.net/man/1/tar"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a>,
      <a href="https://linux.die.net/man/1/xz"><span class="citerefentry"><span class="refentrytitle">xz</span>(1)</span></a>,
      <a href="https://linux.die.net/man/1/gzip"><span class="citerefentry"><span class="refentrytitle">gzip</span>(1)</span></a>,
      <a href="https://linux.die.net/man/1/bzip2"><span class="citerefentry"><span class="refentrytitle">bzip2</span>(1)</span></a>
    </p></div></div></body></html>
